#include <unistd.h>
#include "stdio.h"
#include "sys/types.h"

int main(int argc, char const *argv[])
{
    //打印
    printf("mian进程开始执行 %d\n", getpid());

    int num = 100;
    //创建子进程
    /**
     * fork() 内部根据当前进程，创建子进程
     * 拷贝当前进程的内存空间（代码，数据，堆栈等），复制当前进程的寄存器内容），作为子进程的内存
     * 子进程创建成功，依次执行父进程和子进程 子进程和父进程是两个进程，互不干扰
     * fork() 函数返回值 选择父进程片执行，返回子进程pid，选择子进程执行，返回0
     * 程序计数器（PC）：   可以看成内部的变量，记录当前程序执行到的位置
     */
    pid_t pid = fork();
    if (pid == -1)
    {
        printf("创建子进程失败\n");
        return -1;
    }else if (pid == 0)
    {
        num ++;
        printf("子进程开始执行 %d, num: %d\n", getpid(),num);
    }
    else
    {
        num --;
        printf("父进程继续执行 %d num: %d\n", getpid(),num);
    }
    printf("进程即将结束 %d\n", getpid());
    return 0;
}
